#!/usr/bin/python3
# _*_ coding: utf-8 _*_
#
# Copyright (C) 2023 - 2023 heihieyouheihei, Inc. All Rights Reserved 
#
# @Time    : 2023/1/4 21:15
# @Author  : heihieyouheihei
# @File    : base5_grammar_11.py
# @IDE     : PyCharm
# 正则表达式
# 概念: 正则表达式是一种用来匹配字符串的强有力的武器. 设计思路是一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,就认为它"匹配",否则就不匹配
# 正则表达式的8个内容
# 1. 行定位符
# 2. 元字符
# 3. 限定符
# 4. 字符类
# 5. 排除字符
# 6. 选择字符
# 7. 转义字符
# 8. 分组

# 1. 行定位符, 行定位符就是定位行的开始和结束
# ^ 表示开始:
# "HiPython Hi明日科技"
# "^Hi"
# $ 表示结束:
# "HiPython Hi明日科技"
# "科技$"就会匹配上面字符串中的'科技'

# 2. 元字符, 就是在正则表达式中具有特殊意义的专用字符
# # .     匹配除换行符以外的任意字符,1个'.'代表一个字符
# # \w    匹配字母.数字.下划线或者汉字
# # \W    匹配字母.数字.下换下或者汉字以外的字符
# # \s    匹配任意的空白符
# # \b    匹配单词的开始或结束
# # \d    匹配数字

# 3. 限定符, 用来限定匹配数量
# ?      匹配前面的字符零次或一次        colou?r:        匹配colour和color#
# +      匹配前面的字符一次或多次        go+gle:         匹配的范围从gogle到goo...gle
# *      匹配前面的字符零次或多次        go*gle:         匹配的范围从ggle到goo...gle
# {n}    匹配前面的字符n次             go{2}gle:       只匹配google
# {n,}   匹配前面的字符最少n次          go{2,}gle:      匹配的范围从google到goo...gle
# {n,m}  匹配前面的字符最少n次,最多m次   employe{0,2}    匹配employ.employe和employee

# 4. 字符类:[], 就是定义一个字符集合, 然后匹配这个集合当中字符的意思,使用[]表示 [aeiou]:匹配任意一个原音字母; [\u4e00-\u9fa5]:匹配任意一个汉字
# 5. 排除字符^:用来匹配不符合指定字符集中字符串的,使用'^'表示    '^'单独使用表示字符串开头,'^'放在[]中表示排除字符串    [^a-zA-Z]:匹配一个不是字母的字符
# 6. 选择字符|: 对于选择字符可以理解为"或",用来表示符合这个条件或符合另一个条件    [a-z]|[0-9]:匹配a--z的小写字母或者从0--9的数字
# 7. 转义字符\: 这里的转义字符用'\'表示,把一个特殊的字符变为普通的字符
# [1-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
# [1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

# 8. 分组():
# (\.[0-9]{1,3}){3}:对这个分组重复3次匹配
# 在Python中使用正则表达式还需要用''把它括起来,让它变成模式字符串    '[^a-zA-Z]'
# '\\bm\\w*\\b' :以字母m开头或者结尾的字符串(每一个\都需要转义)
# r'\bm\w*\b':在模式字符砖前面加上R或者r转换成原生字啊渡船